/*
Date:20210422 10:42am
key:本题很经典，一个字符串怎么变成另一个字符串花费的最少次数，要通过空字符串来初始化横纵列，要知道
多一行多一列，因此字符串判断相等的时候下标要-1.
*/
class Solution {
public:
    int minDistance(string word1, string word2) 
    {
        int m=word1.size()+1;
        int n=word2.size()+1;

        int**Mat=new int*[n];
        for(int i=0;i<n;i++)
        {
            Mat[i]=new int[m];
        }
        for(int i=0;i<n;i++)
        {
            Mat[i][0]=i;
        }
        for(int i=0;i<m;i++)
        {
            Mat[0][i]=i;
        }
        
        for(int i=1;i<n;i++)
        {
            for(int j=1;j<m;j++)
            {
                if(word1[j-1]==word2[i-1])
                {
                    Mat[i][j]=Mat[i-1][j-1];
                }
                else
                {
                    Mat[i][j]=min(min(Mat[i-1][j-1],Mat[i-1][j]),Mat[i][j-1])+1;
                }
                // if(j==m-1&&Mat[i][j]<min1)
                // {
                //     min1=Mat[i][j];
                // }
            }
        }
        return Mat[n-1][m-1];
    }
};